package com.example.controller;


import com.alibaba.fastjson.JSON;
import com.example.domain.message.MessageConstant;
import com.example.domain.message.RedisMessageConstant;
import com.example.domain.pojo.Member;
import com.example.domain.result.Result;
import com.example.domain.utils.MD5Utils;
import com.example.service.MemberService;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

/**
 * 处理会员相关操作
 */
@RestController
@RequestMapping("/login")
public class LoginController {

    @Autowired
    private JedisPool jedisPool;


    @Autowired
    private MemberService memberService;

    /*@RequestMapping("/check") //提交的数据没有实体类对应,用map接受,返回的数据没有实体类,用list<map>返回
    public Result checkLogin(@RequestBody Map map, HttpServletResponse response){//json数据,请求体中的数据用@RequestBoby注解
        //1:校验用户输入的验证码是否正确
        String  validateCode = (String) map.get("validateCode");

        //2:从redis中取出验证码
        String  telephone = (String) map.get("telephone");
        String jedisCode = jedisPool.getResource().get(telephone+"code");

        //比较验证码是否正确 三个条件,判断两个验证码是否为空,两者相同
        if(validateCode==null||!jedisCode.equals(validateCode)){
            //验证码不正确
            return new Result(false, MessageConstant.VALIDATECODE_ERROR);
        }
        //3:验证码正确,需要传递手机号,判断用户是否是会员
        //4:验证码正确,判断当前用户是否是会员,不是会员自动注册成为会员

       Member member= memberService.findTelement(telephone);//查询会员表
        Member m=new Member();
       if(member==null){
           //注册成为会员
           m.setPhoneNumber(telephone);
           m.setRegTime(new Date());
           m.setPassword((String) map.get("password"));
           memberService.add(m);
       }
        //5:将会员信息转换为json字符串保存到redis,代替session
        //方便随时从redis中取出数据,方便session集群(一个项目部署到不同的服务器,使用的相同数据库)共享:项目稳定性,(一个服务器挂了)实现服务器的无缝切换
        //session不共享,但是为了实现session共享,用redis存储session信息
        String json = JSON.toJSON(m).toString();
        jedisPool.getResource().setex(telephone,60,json);

        //6:将手机号存储在安卓客户端 判断当前是哪个用户 TODO
        return new Result(true,MessageConstant.LOGIN_SUCCESS,telephone);
    }*/

    @RequestMapping("/passwordResigst")
    public Result regist(@RequestBody Member member){
        //从数据库获得用户信息
        Member m= memberService.findTelement(member.getPhoneNumber());
        if(m==null){
            //将注册信息存储在数据库
            memberService.add(member);

            return new Result(true,MessageConstant.ADD_MEMBER_SUCCESS, 200);
        }else{
            //用户登录失败
            return new Result(false,MessageConstant.ADD_MEMBER_FAIL,201);
        }

    }


    @RequestMapping("/login") //提交的数据没有实体类对应,用map接受,返回的数据没有实体类,用list<map>返回
    public Result passwordLogin(String  telephone,String password){//json数据,请求体中的数据用@RequestBoby注解

        Member member= memberService.findTelement(telephone);//查询会员表
        if(member==null){
            return new Result(false,MessageConstant.LOGIN_FAIL,"此手机号不存在");
        }else if(MD5Utils.md5(password).equals(member.getPassword())){
            //2:将会员信息转换为json字符串保存到redis,代替session
            //方便随时从redis中取出数据,方便session集群(一个项目部署到不同的服务器,使用的相同数据库)共享:项目稳定性,(一个服务器挂了)实现服务器的无缝切换
            //session不共享,但是为了实现session共享,用redis存储session信息
            String json = JSON.toJSON(member).toString();
            jedisPool.getResource().setex(telephone,60,json);

            //将用户id返回
            return new Result(true,MessageConstant.LOGIN_SUCCESS,member.getId());
        }
        return new Result(false,MessageConstant.LOGIN_FAIL,"密码错误");
    }

    //完善用户信息 用户姓名和用户性别 用户身份证号 用户实名认证
    @RequestMapping("/authentication") //提交的数据没有实体类对应,用map接受,返回的数据没有实体类,用list<map>返回
    public Result authentication(@RequestBody Member member){//json数据,请求体中的数据用@RequestBoby注解
        if(member==null||member.getPhoneNumber()==null){
            return new Result(false,MessageConstant.AYTHENTICATION_FAIL);
        }else{
            Member member1= memberService.findTelement(member.getPhoneNumber());//查询会员表
            if(member1==null){
                return new Result(false,"此用户不是会员，请先注册");
            }
            member1.setName(member.getName());
            member1.setIdCard(member.getIdCard());
            member1.setSex(member.getSex());
            member1.setMerry(member.getMerry());
            member1.setAge(member.getAge());

            //将认真信息添加到数据库
             Member member2=memberService.updateMember(member1);
            //2:将会员信息转换为json字符串保存到redis,代替session
            //方便随时从redis中取出数据,方便session集群(一个项目部署到不同的服务器,使用的相同数据库)共享:项目稳定性,(一个服务器挂了)实现服务器的无缝切换
            //session不共享,但是为了实现session共享,用redis存储session信息
            String json = JSON.toJSON(member2).toString();
            jedisPool.getResource().setex(member.getPhoneNumber(),60,json);
            return new Result(true,MessageConstant.AYTHENTICATION_SUCCESS);
        }
    }

    //修改手机号
    @RequestMapping("/updatePhone") //提交的数据没有实体类对应,用map接受,返回的数据没有实体类,用list<map>返回
    public Result updatePhone(String phone,String newtelephone){
        //根据手机号查询
        Member member= memberService.findTelement(phone);//查询会员表
        if(member==null){
            return new Result(false,"此用户不是会员");
        }
        member.setPhoneNumber(newtelephone);
        memberService.updatePassword(member);
        return new Result(true,"修改成功");
    }
    //修改密码
    @RequestMapping("/updatePassword") //提交的数据没有实体类对应,用map接受,返回的数据没有实体类,用list<map>返回
    public Result updatePassword(String phone,String password){
        //根据手机号查询
        Member member= memberService.findTelement(phone);//查询会员表
        if(member==null){
            return new Result(false,"此用户不是会员");
        }
        member.setPassword(password);
        memberService.updatePassword(member);
        return new Result(true,"修改成功");
    }

}
